package com.itextpdf.text.pdf;
import com.itextpdf.text.DocumentException;
import org.junit.Assert;
import org.junit.Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class MultithreadedTtfTest {
private static HashMap<Integer, Exception> exceptions;
private int numberOfThreads = 100;
@Test
public void TtfTest() throws IOException, InterruptedException, DocumentException {
new File("./target/com/itextpdf/test/pdf/MultithreadedTtfTest/").mkdirs();
exceptions = new HashMap<Integer, Exception>();
List<Runnable> runners = new ArrayList<Runnable>();
for (int i = 1; i <= numberOfThreads; i++) {
runners.add(new TtfTestRunner(i));
}
ExecutorService exec = Executors.newCachedThreadPool();
for (Runnable runner : runners) {
exec.submit(runner);
}
exec.shutdown();
exec.awaitTermination(60, TimeUnit.SECONDS);
Assert.assertEquals(0, exceptions.size());
}
synchronized static public void registerException(int thread, Exception exception) {
exceptions.put(thread, exception);
}
static private final class TtfTestRunner implements Runnable {
private int threadNumber;
public TtfTestRunner(int threadNumber) throws IOException,DocumentException {
this.threadNumber = threadNumber;
}
public void run() {
try {
PdfReader reader = new PdfReader(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/MultithreadedTtfTest/test.pdf"));
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("./target/com/itextpdf/test/pdf/MultithreadedTtfTest/out" + Integer.toString(threadNumber) + ".pdf"));
PdfContentByte cb = stamper.getOverContent(1);
cb.beginText();
BaseFont font = BaseFont.createFont("./src/test/resources/com/itextpdf/text/pdf/MultithreadedTtfTest/FreeSans.ttf", threadNumber % 2 == 0 ? BaseFont.IDENTITY_H : BaseFont.WINANSI, BaseFont.EMBEDDED);
cb.setFontAndSize(font, 12);
cb.moveText(30, 600);
cb.showText("`1234567890-=qwertyuiop[]asdfghjkl;'\\zxcvbnm,./");
cb.endText();
stamper.close();
reader.close();
} catch (Exception exc) {
registerException(threadNumber, exc);
}
}
}
}